const tree = require('./bt')

// const bfs = (root, q = []) => {
  
//   const fn = list => {
//     list.forEach(i => {
//       q.push(i.value)
//     })

//     list.forEach(i => {
//       if(i.children){
//         fn(i.children, q)
//       }
//     })

//     return q

//   }
  
//   const queue = fn([root], [])
//   queue.forEach(i => console.log(i))
// }

// const bfs = async (root, q = []) => {
  
//   const fn =  async list => {
//     var all = list.map(async i => {
//       q.push(i.value)
//       await Promise.resolve()
//       if(i.children){
//         fn(i.children, q)
//       }
//     })

//     await Promise.all(all)

//     return q

//   }
  
//   const queue = await fn([root], [])
//   queue.forEach(i => console.log(i))
// }

const bfs = root => {
  let q = [root]

  while(q.length > 0){
    const n = q.shift()
    console.log(n.value)
    if(n.children){
      n.children.forEach(c => {
        q.push(c)
      })
    }
  }

}

bfs(tree)

